#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include "ticket.hpp"

// //int ticket = 100;
//pthread_mutex_t mutex;  // 定义互斥锁

//Mutex mutex;

// void *route(void* arg)
// {
//     char* id = (char*) arg;
//     while(1)
//     {
//         pthread_mutex_lock(&mutex);  // 加锁：进入临界区
//         if(ticket > 0)
//         {
//             usleep(1000);  // 模拟售票耗时操作
//             printf("%s sells tickets: %d\n", id, ticket);  // 添加换行符
//             ticket--;
//             pthread_mutex_unlock(&mutex);  // 解锁：退出临界区
//         }
//         else
//         {
//             pthread_mutex_unlock(&mutex);  // 解锁：避免死锁
//             break;
//         }
//     }
//     return NULL;  // 线程函数返回void*
// }

// int main()
// {
//     pthread_mutex_init(&mutex, NULL);  // 初始化互斥锁

//     pthread_t t1, t2, t3, t4;
//     pthread_create(&t1, NULL, route, (void*)"ticket 1");
//     pthread_create(&t2, NULL, route, (void*)"ticket 2");
//     pthread_create(&t3, NULL, route, (void*)"ticket 3");
//     pthread_create(&t4, NULL, route, (void*)"ticket 4");

//     pthread_join(t1, NULL);
//     pthread_join(t2, NULL);
//     pthread_join(t3, NULL);
//     pthread_join(t4, NULL);

//     pthread_mutex_destroy(&mutex);  // 销毁互斥锁
//     return 0;
// }


// void* route(void* arg)
// {
//     char* id = (char*)arg;
//     while (1)
//     {
//         /* code */
//         LockGuard lockguard(mutex);
//         if(ticket > 0)
//         {
//             usleep(1000);
//             printf("%s sells ticket:%d\n", id, ticket);
//             ticket--;
//         }
//         else
//         {
//             break;;
//         }
//     }

//     return nullptr;
// }

// int main(void)
// {
//     pthread_t t1, t2, t3, t4;

//     pthread_create(&t1, NULL, route, (void*)"thread 1");
//     pthread_create(&t2, NULL, route, (void*)"thread 2");
//     pthread_create(&t3, NULL, route, (void*)"thread 3");
//     pthread_create(&t4, NULL, route, (void*)"thread 4");

//     pthread_join(t1, NULL);
//     pthread_join(t2, NULL);
//     pthread_join(t3, NULL);
//     pthread_join(t4, NULL);
// }


#include <iostream>
#include <string.h>
#include <unistd.h>
#include <pthread.h>

pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

void* active(void* arg)
{
    std::string name = static_cast<const char*>(arg);
    while(true)
    {
        pthread_mutex_lock(&mutex);
        pthread_cond_wait(&cond, &mutex);
        std::cout << name << "活动..." << std::endl;
        pthread_mutex_unlock(&mutex); 
    }
}

int main(void)
{
    pthread_t t1, t2;

    pthread_create(&t1, NULL, active, (void*)"thread -1");
    pthread_create(&t2, NULL, active, (void*)"thread -2");

    sleep(3);
    while(true)
    {
        pthread_cond_broadcast(&cond);//唤醒所有线程；
    }
    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
}
